﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using System.Data;
using System.Data.SqlClient;

namespace DAL
{
    //一个实体对象相当于表中一行记录
    public class UserInfoDal
    {
        //增加实体对象
        public static bool Add(UserInfo o)
        {
            string sql = string.Format("insert into UserInfo values('{0}','{1}','{2}','{3}')", o.Username, o.Pswd, o.Role, o.Email);
            return DBHelper.ExecuteNonQuery(sql);
        }
        //根据id删除实体对象
        public static bool Delete(int id)
        {
            string sql = "delete from UserInfo where Id=" + id;
            return DBHelper.ExecuteNonQuery(sql);
        }
        //根据id修改实体对象
        public static bool Update(UserInfo o)
        {
            string sql = string.Format("update UserInfo set Username='{0}',Pswd='{1}',Role='{2}' where Id={3}", o.Username, o.Pswd, o.Role, o.Id);
            return DBHelper.ExecuteNonQuery(sql);
        }
        //根据 条件 查询 所有满足条件的记录  万能查询（除了分页）
        public static List<UserInfo> Select(string sql)
        {
            DataTable dt = DBHelper.GetDataTable(sql);//调用DBHelper类查询得到表格。动点脑经不要一模一样照着这
            //个调用，根据你自己的DBHelper调用，命名空间是否一致
            List<UserInfo> objs = new List<UserInfo>();//创建保存实体对象（记录行）的list集合，相当于表
            if (dt.Rows.Count > 0)//如果查询表格有至少一条数据，转化成实体对象
            {
                foreach (DataRow row in dt.Rows)////循环每一行
                {
                    UserInfo obj = new UserInfo();//实体类对象（相当于数据表一行）
                    obj.Id = int.Parse(row["id"].ToString());
                    obj.Username = row["UserName"].ToString();//将表当前行的某列值存储在对象的属性。对象属性相当于列。
                    obj.Pswd = row["Pswd"].ToString();
                    obj.Role = row["Role"].ToString();
                    obj.Email = row["Email"].ToString();
                    objs.Add(obj);//将实体对象添加到集合
                }
            }
            return objs;//返回集合，相当于表格。如果查询没有数据，则返回长度为0的集合。
        }
        //根据 条件 查询 所有满足条件的记录  万能查询（除了分页）
        public static List<UserInfo> SelectAll(string where)
        {
            string sql = "select * from UserInfo ";
            if (!string.IsNullOrEmpty(where))//如果传递了条件查询参数，则拼接条件语句
            {
                sql = sql + " where " + where;
            }        
            return Select(sql);//返回集合，相当于表格。如果查询没有数据，则返回长度为0的集合。
        }
        //根据id查询单个实体对象
        public static UserInfo SelectOne(int id)
        {
            List<UserInfo> objs = SelectAll(" Id=" + id);//调用万能查询方法 传递参数 参数满足条件的记录
            if (objs.Count > 0)//如果查询结果大于0 则取第一个 返回
            {
                return objs[0];
            }
            return null;
        }
        //获取记录总数
        public static int GetTotal()
        {
            string sql = "select count(*) from UserInfo";
            object r = DBHelper.ExecuteScalar(sql);
            return (int)r;
        }
        //分页查询
        public static List<UserInfo> SelectAllByPage(int pageSize, int PageNo)
        {
            string sql = "select top " + pageSize + " * from UserInfo where ID not in ("
              + " select top " + pageSize * (PageNo - 1) + " ID  from UserInfo )";
            return Select(sql);
        }

    }
}
